#include "file_base.h"

QFileBase::QFileBase()
{
}

//-----------------------------------------------------------------------------
QString QFileBase::DelMultiSlash(const QString &ch_str,
                                       bool del_r,
                                       int  leave_sl_cnt)
{
    QString rez_str = ch_str.trimmed(); // удаляем пробелы с обеих сторон
    QString sl_str(""); // сюда скопируем все найденные слэши
    while(rez_str.length()>0)
    {
        if(del_r){
            // удаляем слэши справа
            if(rez_str.right(1)=="/"){
                sl_str += "/";
                rez_str = rez_str.left(rez_str.length()-1);
            }else break;
        }else{
            // удаляем слэши слева
            if(rez_str.left(1)=="/"){
                sl_str += "/";
                rez_str = rez_str.right(rez_str.length()-1);
            }else break;
        }
    }

    // если слэши не нужны, возвращаем rez_str
    if(leave_sl_cnt<=0) return rez_str;

    // слэшей найдено больше, чем нужно, укорачиваем
    if(sl_str.length()>leave_sl_cnt)
        sl_str = sl_str.left(leave_sl_cnt);

    // склеиваем в зависимости от того, с какой стороны удаляли слэши
    return (del_r) ? (rez_str + sl_str) : (sl_str + rez_str);

}

//-----------------------------------------------------------------------------
QString QFileBase::ConcatDirFile(const QString &fold_name,
                              const QString &fold_or_file_name)
{

    // удаляем лишние слэши и пробелы
    QString n_fold_fname = DelMultiSlash(fold_name, true, 1);
    n_fold_fname         = DelMultiSlash(n_fold_fname , false, 1);
    QString n_file_fname = DelMultiSlash(fold_or_file_name, true, 1);
    n_file_fname = DelMultiSlash(n_file_fname, false, 1);

    // если одна из частей пустая, возвращаем другую, не изменяя ее
    if(n_file_fname.length()<=0) return n_fold_fname;
    if(n_fold_fname.length()<=0) return n_file_fname;

    // проверяем наличие слэша
    bool fold_has_sl = (n_fold_fname.right(1)=="/");
    bool file_has_sl = (n_file_fname.left(1)=="/");

    // слэш отсутствует с обеих сторон
    if((!fold_has_sl) && (!file_has_sl))
        n_fold_fname += "/";

    // если слэш есть с обеих сторон
    if(fold_has_sl && file_has_sl)
        n_fold_fname = DelMultiSlash(n_fold_fname, true, 0);

    // соединяем обе части
    return n_fold_fname + n_file_fname;
}
